C 언어 포인터
IT 위키
C 언어 포인터(Pointer in C, 포인터)는 메모리의 주소를 저장하는 변수로, 변수나 함수, 배열 등의 위치를 가리킬 수 있는 기능을 제공한다.
1 개요[편집 | 원본 편집]
포인터는 C 언어의 핵심 개념 중 하나로, 메모리 관리, 동적 할당, 배열 및 함수 간 데이터 전달 등에 필수적으로 사용된다. 일반 변수는 값을 저장하지만, 포인터는 해당 값이 저장된 메모리의 주소를 저장한다.
2 선언과 초기화[편집 | 원본 편집]
포인터는 자료형 뒤에 `*`를 붙여 선언하며, `&` 연산자를 사용해 주소값을 대입한다.
- 선언 형식: `자료형 *포인터이름;`
- 예:
- `int *p;` → 정수형을 가리키는 포인터 선언
- `int a = 10;`
- `p = &a;` → 변수 a의 주소를 포인터 p에 저장
3 간접 참조[편집 | 원본 편집]
포인터가 가리키는 주소에 접근하려면 `*` 연산자를 사용한다. 이를 간접 참조(dereferencing)라고 한다.
- 예:
- `*p = 20;` → p가 가리키는 변수의 값을 20으로 변경
4 포인터 연산[편집 | 원본 편집]
포인터는 정수값을 더하거나 뺄 수 있으며, 이는 해당 자료형의 크기 단위로 이동한다.
- 예:
- `p + 1` → 다음 요소(예: int형이면 +4바이트)를 가리킴
5 배열과 포인터[편집 | 원본 편집]
배열 이름은 해당 배열의 첫 번째 요소를 가리키는 포인터처럼 동작한다.
- 예:
- `int arr[3] = {1, 2, 3};`
- `int *p = arr;`
- `p[1]` 또는 `*(p + 1)` → 2
6 함수와 포인터[편집 | 원본 편집]
포인터는 함수 인자로 전달되어 원본 데이터를 변경할 수 있게 한다(주소 전달 방식).
- 예:
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
7 동적 메모리 할당[편집 | 원본 편집]
포인터는 malloc, calloc, realloc 등을 사용하여 런타임 중에 메모리를 할당받는 데 사용된다.
- 예:
int *p = (int *)malloc(sizeof(int) * 5);
8 예제[편집 | 원본 편집]
다음은 기본적인 포인터 사용 예제이다:
#include <stdio.h>
int main() {
int a = 100;
int *p = &a;
printf("변수 a의 값: %d\n", a);
printf("포인터 p가 가리키는 값: %d\n", *p);
printf("변수 a의 주소: %p\n", &a);
printf("포인터 p의 값: %p\n", p);
return 0;
}
9 같이 보기[편집 | 원본 편집]
10 참고 문헌[편집 | 원본 편집]
- Kernighan, Brian W., and Ritchie, Dennis M. *The C Programming Language*. Prentice Hall, 1988.
- King, K. N. *C Programming: A Modern Approach*. W. W. Norton & Company, 2008.